TDAArbolBinario

## Interface BinaryTree<E>

- All Superinterfaces:
    GTTree<E>, java.lang.Iterable<E>
  All Known Implementing Classes:
    ArbolBinario

      public interface BinaryTree<E>
      extends GTTree<E>

  Interface BinaryTree Exstiende la interfaz GTTree, presentada por Goodrich y Tamassia en su cuarta edición (la interfaz para árbol que no incluye operaciones de modificación).
  Author:
    Cátedra de Estructuras de Datos, Departamento de Cs. e Ing. de la Computación, UNS.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `TDALista.Position<E>` | `addLeft(TDALista.Position<E> v, E r)` Agrega un nodo con rótulo r como hijo izquierdo de un nodo dado.
    `TDALista.Position<E>` | `addRight(TDALista.Position<E> v, E r)` Agrega un nodo con rótulo r como hijo derecho de un nodo dado.
    `void` | `attach(TDALista.Position<E> r, BinaryTree<E> T1, BinaryTree<E> T2)` Inserta a los árboles T1 y T2 como subárboles hijos de la hoja v (izquierdo y derecho respectivamente).
    `TDALista.Position<E>` | `createRoot(E r)` Crea un nodo con rótulo e como raíz del árbol.
    `boolean` | `hasLeft(TDALista.Position<E> v)` Testea si v tiene un hijo izquierdo.
    `boolean` | `hasRight(TDALista.Position<E> v)` Testea si v tiene un hijo derecho.
    `TDALista.Position<E>` | `left(TDALista.Position<E> v)` Devuelve la posición del hijo izquierdo de v.
    `E` | `remove(TDALista.Position<E> v)` Elimina el nodo referenciado por una posición dada.
    `TDALista.Position<E>` | `right(TDALista.Position<E> v)` Devuelve la posición del hijo derecho de v.

    - ### Methods inherited from interface TDAArbolBinario.GTTree

      `children, isEmpty, isExternal, isInternal, isRoot, iterator, parent, positions, replace, root, size`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Method Detail

    - #### left

          TDALista.Position<E> left(TDALista.Position<E> v)
                             throws TDALista.InvalidPositionException,
                                    TDALista.BoundaryViolationException

      Devuelve la posición del hijo izquierdo de v.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Posición del hijo izquierdo de v.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.
        `TDALista.BoundaryViolationException` - si v no tiene hijo izquierdo.

    - #### right

          TDALista.Position<E> right(TDALista.Position<E> v)
                              throws TDALista.InvalidPositionException,
                                     TDALista.BoundaryViolationException

      Devuelve la posición del hijo derecho de v.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Posición del hijo derecho de v.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.
        `TDALista.BoundaryViolationException` - si v no tiene hijo derecho.

    - #### hasLeft

          boolean hasLeft(TDALista.Position<E> v)
                   throws TDALista.InvalidPositionException

      Testea si v tiene un hijo izquierdo.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Verdadero si v tiene un hijo izquierdo y falso en caso contrario.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.

    - #### hasRight

          boolean hasRight(TDALista.Position<E> v)
                    throws TDALista.InvalidPositionException

      Testea si v tiene un hijo derecho.
      Parameters:
        `v` - Posición de un nodo.
      Returns:
        Verdadero si v tiene un hijo derecho y falso en caso contrario.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida.

    - #### createRoot

          TDALista.Position<E> createRoot(E r)
                                   throws InvalidOperationException

      Crea un nodo con rótulo e como raíz del árbol.
      Parameters:
        `E` - Rótulo que se asignará a la raíz del árbol.
      Throws:
        `InvalidOperationException` - si el árbol ya tiene un nodo raíz.

    - #### addLeft

          TDALista.Position<E> addLeft(TDALista.Position<E> v,
                                       E r)
                                throws InvalidOperationException,
                                       TDALista.InvalidPositionException

      Agrega un nodo con rótulo r como hijo izquierdo de un nodo dado.
      Parameters:
        `r` - Rótulo del nuevo nodo.
        `v` - Posición del nodo padre.
      Returns:
        La posición del nuevo nodo creado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o el árbol está vacío.
        `InvalidOperationException` - si v ya tiene un hijo izquierdo.

    - #### addRight

          TDALista.Position<E> addRight(TDALista.Position<E> v,
                                        E r)
                                 throws InvalidOperationException,
                                        TDALista.InvalidPositionException

      Agrega un nodo con rótulo r como hijo derecho de un nodo dado.
      Parameters:
        `r` - Rótulo del nuevo nodo.
        `v` - Posición del nodo padre.
      Returns:
        La posición del nuevo nodo creado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o el árbol está vacío.
        `InvalidOperationException` - si v ya tiene un hijo derecho.

    - #### remove

          E remove(TDALista.Position<E> v)
            throws InvalidOperationException,
                   TDALista.InvalidPositionException

      Elimina el nodo referenciado por una posición dada. Si el nodo tiene un único hijo, el nodo eliminado será reemplazado por su único hijo.
      Parameters:
        `v` - Posición del nodo a eliminar.
      Returns:
        el rótulo del nodo eliminado.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o el árbol está vacío.
        `InvalidOperationException` - si el nodo a eliminar tiene mas de un hijo.

    - #### attach

          void attach(TDALista.Position<E> r,
                      BinaryTree<E> T1,
                      BinaryTree<E> T2)
               throws TDALista.InvalidPositionException

      Inserta a los árboles T1 y T2 como subárboles hijos de la hoja v (izquierdo y derecho respectivamente).
      Parameters:
        `v` - Posición de una hoja del árbol.
        `T1` - árbol binario a insertar como hijo izquierdo de v.
        `T2` - árbol binario a insertar como hijo derecho de v.
      Throws:
        `TDALista.InvalidPositionException` - si la posición pasada por parámetro es inválida o el árbol está vacío, o v no corresponde a una hoja.